"""
清除缓存管理命令
"""
from django.core.management.base import BaseCommand
from django.core.cache import cache
from django.core.cache.utils import make_template_fragment_key
import sys


class Command(BaseCommand):
    help = '清除系统缓存'

    def add_arguments(self, parser):
        parser.add_argument(
            '--all',
            action='store_true',
            help='清除所有缓存',
        )
        parser.add_argument(
            '--api',
            action='store_true',
            help='清除API缓存',
        )
        parser.add_argument(
            '--route',
            action='store_true',
            help='清除路线规划缓存',
        )
        parser.add_argument(
            '--recommendation',
            action='store_true',
            help='清除推荐系统缓存',
        )

    def handle(self, *args, **options):
        self.stdout.write(self.style.SUCCESS('清除缓存...'))
        self.stdout.write('')

        cleared_count = 0

        if options['all']:
            # 清除所有缓存
            self.stdout.write('清除所有缓存...')
            try:
                cache.clear()
                self.stdout.write(self.style.SUCCESS('  ✓ 所有缓存已清除'))
                cleared_count += 1
            except Exception as e:
                self.stdout.write(self.style.ERROR(f'  ✗ 清除失败: {str(e)}'))
                sys.exit(1)
        else:
            # 选择性清除
            if options['api']:
                self._clear_pattern('api_metrics_*', 'API缓存')
                cleared_count += 1

            if options['route']:
                self._clear_pattern('route_plan_*', '路线规划缓存')
                self._clear_pattern('route_by_code_*', '路线分享缓存')
                self._clear_pattern('hot_routes_*', '热门路线缓存')
                self._clear_pattern('recommended_routes_*', '推荐路线缓存')
                cleared_count += 1

            if options['recommendation']:
                self._clear_pattern('attraction_recommendations_*', '景点推荐缓存')
                self._clear_pattern('content_based_rec_*', '内容推荐缓存')
                cleared_count += 1

            if not any([options['api'], options['route'], options['recommendation']]):
                self.stdout.write(self.style.WARNING('请指定要清除的缓存类型，或使用 --all 清除所有缓存'))
                self.stdout.write('')
                self.stdout.write('可用选项:')
                self.stdout.write('  --all           清除所有缓存')
                self.stdout.write('  --api           清除API缓存')
                self.stdout.write('  --route         清除路线规划缓存')
                self.stdout.write('  --recommendation 清除推荐系统缓存')
                return

        self.stdout.write('')
        self.stdout.write(self.style.SUCCESS(f'缓存清除完成！共清除 {cleared_count} 类缓存'))

    def _clear_pattern(self, pattern, description):
        """清除匹配模式的缓存"""
        self.stdout.write(f'清除{description}...')
        try:
            # 注意：Django cache.clear()会清除所有缓存
            # 对于特定模式的清除，需要遍历所有键（如果Redis支持）
            # 这里简化处理，提示用户使用--all
            self.stdout.write(self.style.WARNING(f'  ⚠ {description}清除需要清除所有缓存'))
            self.stdout.write(self.style.WARNING('  建议使用: python manage.py clear_cache --all'))
        except Exception as e:
            self.stdout.write(self.style.ERROR(f'  ✗ 清除失败: {str(e)}'))

